# 解决Mysql错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)

(adsbygoogle = window.adsbygoogle || []).push({});

目录

# 前言

很多新手在做后端项目一般都会跟mysql打交道,难免会遇到mysql的各种问题,如下面这个:

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)

这个错误可能有两种情况:

1)用户名或密码错误:需要修改登录密码

2)root用户被禁止登录:需要增加root用户连接权限

# 解决方案

# 1 修改mysql配置文件

打开mysql配置文件:

windows环境:mysql安装目录下的my.ini,linux环境:/etc/my.cnf

[mysqld]节增加skip-grant-tables,意思是跳过验证,如:

# 2 重启mysql服务

linux:

命令行输入:systemctl restart mysql

windows:

1)按下键盘组合键:win+R,调出运行命令窗口

2)在找到mysql服务,右键点击重启

此时mysql已经可以免密登录

# 3修改登录密码

命令行登录mysql

windows

用命令行进入mysql目录下的bin目录,或在bin目录按住shift+右键点击此处打开powershell窗口

linux

继续操作

命令行操作如下:

mysql -uroot

依次执行下面命令,修改为新密码

USE mysql ;
UPDATE user SET Password = password('新的密码') WHERE User = 'root' ;
flush privileges ; 

检查root是否有localhost连接权限

SELECT host,user FROM user;

如图所示host代表mysql可以接受root账号的来源地址,其中%代表可以接受任意地址连接;如果缺少对应连接地址也会提示access deny,请根据实际需要执行下面的脚本

增加root@localhost连接权限

grant all privileges on *.* to root@localhost with grant option;

增加[email protected]连接权限

grant all privileges on *.* to root@'127.0.0.1' with grant option;

增加内网地址[email protected]连接权限,这个场景是只有数据库和web应用分别在两台机器上,web应用部署在192.168.3.22地址,则需要加入这个权限才能远程访问mysql

grant all privileges on *.* to root@'192.168.3.22' with grant option;

增加root@%连接权限,表示可以在任意地址远程连接mysql数据库,生产环境不建议这样使用

grant all privileges on *.* to root@'%' with grant option;

# 4移除skip-grant-tables

此时已经修改了root密码,mysql现在还在裸奔,所以把mysql配置的skip-grant-tables移除掉,然后再重启mysql服务

(adsbygoogle = window.adsbygoogle || []).push({});
Last Updated: 7/3/2023, 3:27:37 PM